package com.appkubes.fintech.admin.application.risk.data.boole.utils;

import lombok.extern.slf4j.Slf4j;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author: wuzhijian
 * @Date: 2019/12/25
 * @Description:
 *  Map、bean互转
 */
@Slf4j
public class MapBeanUtil {

    /**
     * 对象驼峰属性名改为下划线属性名
     */
    public static Map<String,Object> beanToMapUnderline(Object bean){
        //创建Map集合对象
        Map<String,Object> map= new HashMap<>();
        //获取对象字节码信息,不要Object的属性
        BeanInfo beanInfo;
        try {
            beanInfo = Introspector.getBeanInfo(bean.getClass(), Object.class);
            //获取bean对象中的所有属性
            PropertyDescriptor[] list = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor pd : list) {
                //获取属性名
                String key = pd.getName();
                //调用getter()方法,获取内容
                Object value = pd.getReadMethod().invoke(bean);
                if (value!=null && !"null".equalsIgnoreCase(value.toString())) {
                    //增加到map集合当中
                    String underlineKey=CamelUnderLineUtil.CameCaseToUnderlineUpper(key);
                    map.put(underlineKey, value.toString());
                }
            }
        } catch (Exception e) {
           log.error("对象转下划线Map<String,String>，异常:", e);
        }
        return map;
    }

    /**
     * 将JavaBean对象封装到Map集合当中
     * @param bean
     * @return
     * @throws Exception
     */
    public static Map<String, Object> bean2map(Object bean)
    {
        //创建Map集合对象
        Map<String,Object> map= new HashMap<>();
        //获取对象字节码信息,不要Object的属性
        BeanInfo beanInfo;
        try {
            beanInfo = Introspector.getBeanInfo(bean.getClass(), Object.class);
            //获取bean对象中的所有属性
            PropertyDescriptor[] list = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor pd : list) {
                //获取属性名
                String key = pd.getName();
                //调用getter()方法,获取内容
                Object value = pd.getReadMethod().invoke(bean);
                if (value!=null && !"null".equalsIgnoreCase(value.toString())) {
                    //增加到map集合当中
                    map.put(key, value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }

}
